package com.hm.hall.commons.util;

/**
 * @author jone
 * @Description:
 * @date 2018年12月21日 下午2:57:18
 */
public class MyStringUtils {

    public static void main(String[] args) {
        String str = "代发哦圣诞节欧阳婷";
        System.out.println(getStringAb(str, 12, true));
    }

    /**
     * @param str
     * @param len       字节长度
     * @param isShowDot 是否显示...
     * @return
     */
    public static String getStringAb(String str, Integer len, boolean isShowDot) {
        len = len + 1;
        String curStr = ""; // 用于实时存储字符串
        for (int i = 0; i < str.length(); i++) {// 遍历整个字符串
            curStr += str.charAt(i); // 记录当前遍历过的所有字符
            if (getCharLength(curStr) >= len) {// 如果当前字符串超过限制长度
                return getStringMaxLength(str, i, isShowDot);
            }
        }
        return str;
    }


    private static Integer getCharLength(String str) {
        Integer iLength = 0; // 记录字符的字节数
        for (int i = 0; i < str.length(); i++) {// 遍历字符串中的每个字符
            String subStr = str.substring(i, i + 1);

            if (subStr.hashCode() > 255) {// 如果当前字符的编码大于255
                iLength += 2; // 所占字节数加2
            } else {
                iLength += 1; // 否则所占字节数加1
            }
        }
        return iLength; // 返回字符所占字节数
    }

    private static String getStringMaxLength(String str, Integer maxLength, boolean isShowDot) {
        String newStr = str;
        if (str.length() > maxLength) {
            if (!isShowDot) {
                newStr = str.substring(0, maxLength);
            } else {
                newStr = str.substring(0, maxLength) + "…";
            }

        }
        return newStr;
    }
}
